//
//  203_移除链表元素.swift
//  Swift-LeetCode
//
//  Created by 卢悦明 on 2024/1/22.
/**
 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
  
 示例 1：
 输入：head = [1,2,6,3,4,5,6], val = 6
 输出：[1,2,3,4,5]
 示例 2：

 输入：head = [], val = 1
 输出：[]
 示例 3：

 输入：head = [7,7,7,7], val = 7
 输出：[]
 */

import UIKit

class RemoveElements: NSObject {
    func QA() {
        var link =  LinkedList<Int>()
        let head = link.creatList(array: [1,2,6,3,4,5,6])
        LinkedList.printList(head)
        let newHead = removeElements(head, 6)
        LinkedList.printList(newHead)
    }
    func removeElements(_ head: ListNode<Int>?, _ val: Int) -> ListNode<Int>? {
        guard  head != nil else {
            return head
        }
        var head = head
        // 虚拟头节点
        let newHead = ListNode(100)
        var current = newHead
        while let temp = head {
            if temp.val != val {
                current.next = temp
                current = temp
            }
            head = temp.next
        }
        // 最关键的一句
        current.next = nil
        return newHead.next
    }
}
